home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs49.d81
/
hack7b.sfx
/
hack#7c.txt
next >
Wrap
Text File
|
1990-02-12
|
40KB
|
863 lines
┘OU CAN DO IT ON THE SCREEN, HOW ABOUT BORDERS ?
┬ECAUSE YOU CANNOT GET CHARACTERS TO THE BORDER, YOU MIGHT THINK THAT IT
IS IMPOSSIBLE TO MAKE A TECH-TECH EFFECT IN THE BORDERS. ╔T TAKES SO
MUCH TIME TO CHANGE SPRITE X-COORDINATES, THAT YOU CAN CHANGE ONLY SOME
OF THEM. ╘HERE IS TIME FOR FIVE SPRITE MOVES, IF YOU DO NOT NEED TO
CHANGE THE MOST SIGNIFICANT (9TH) BIT OF THE X-COORDINATE. ╧N THE OTHER
HAND, YOU COULD DESIGN THE MOVEMENTS DIRECTLY TO THE SPRITES AND THEN
JUST CHANGE THE IMAGES, BUT THEN THE MOVEMENTS WOULD BE CONSTANT.
╚OWEVER, THERE IS ONE TRICK YOU CAN USE TO GET ALL OF THE SPRITES ON THE
SCREEN, WITH VARIABLE MOVEMENTS AND COLOR BARS ETC. ┘OU DO NOT CHANGE
THE X-COORDINATES, BUT THE DATA ITSELF ON EACH SCAN LINE. ╔N FACT YOU
CHANGE THE SPRITE IMAGE POINTERS. ╘HERE IS MULTIPLE SPRITE PICTURES,
WHERE THE GRAPHICS IS SHIFTED HORIZONTALLY, JUST LIKE THE NORMAL
TECH-TECH CHARSETS. ┬ECAUSE OF THIS, THE SPRITES HAVE TO BE PLACED SIDE
BY SIDE. ╬O GAPS ARE ALLOWED. ┬Y CHANGING THE IMAGE POINTERS YOU CAN GET
THE GRAPHICS TO MOVE HORIZONTALLY ON EACH LINE AS YOU WISH. ╫ITH
MULTICOLOR SPRITES YOU HAVE TO REMEMBER THAT ONE PIXEL CORRESPONDS TO
TWO BITS - THE MOVEMENT IS NOT SO SMOOTH.
╫AIT ! ╚OW COME THERE IS ENOUGH TIME TO CHANGE THE SPRITE POINTERS, WHEN
THERE IS NOT TIME TO CHANGE THE COORDINATES ? ╘HIS IS ANOTHER POINTER
TRICK. ╓╔├ READS THE SPRITE IMAGE POINTERS FROM THE END OF THE CURRENT
VIDEO MATRIX, NORMALLY $07F8. ┘OU JUST HAVE TO CHANGE THE VIDEO MATRIX
POINTER ($─018) TO CHANGE ALL OF THE IMAGE POINTERS. ╘HIS TAKES ONLY
EIGHT CYCLES AND THERE IS PLENTY OF TIME LEFT FOR OTHER EFFECTS ON EACH
SCAN LINE. ╔F YOU USE ONLY ONE VIDEO BANK, YOU CAN GET THE SPRITE
PICTURE TO 16 DIFFERENT PLACES. ╘HIS ALLOWS ALSO ANOTHER KIND OF
EFFECTS, JUST USE YOUR IMAGINATION.
--------------------------------------------------------------------------
╘ECH-TECH DEMO PROGRAM (╨┴╠)
┬┴╬╦= $96 ; ╘HE VALUE OF THE VIDEO BANK REGISTER (├╔┴2) IN THE TECH-AREA
┌╨= $╞┬ ; ┌ERO PAGE FOR INDIRECT ADDRESSING
╙╘┴╥╘= $4400 ; ╙TART OF THE CHARSETS (WE USE INVERTED CHARS)
╙├╥┼┼╬= $4000 ; ╨OSITION OF THE VIDEO MATRIX
╙╚╔╞╘╠= $├╞00 ; X-SHIFT, LOWEST 3 BITS
╙╚╔╞╘╚= $├┼00 ; X-SHIFT, HIGHEST 3 BITTID (MULTIPLIED WITH TWO)
╨╧╔╬╘┼╥= $033├ ; ╨OINTER TO SHIFT-TABLE
╓┴╠╒┼= $033─ ; ╙HIFT NOW
╙╨┼┼─= $033┼ ; ╙HIFT CHANGE
*= $├000 ; ╙TART ADDRESS..
╔╬╔╘ ╙┼╔ ; ─ISABLE INTERRUPTS
╠─┴ #$7╞
╙╘┴ $─├0─ ; ─ISABLE TIMER INTERRUPT
╠─┴ #$81
╙╘┴ $─01┴ ; ┼NABLE RASTER INTERRUPT
╠─┴ #<╔╥╤
╙╘┴ $0314 ; ╧UR OWN INTERRUPT HANDLER
╠─┴ #>╔╥╤
╙╘┴ $0315
╠─┴ #49 ; ╘HE INTERRUPT TO THE LINE BEFORE THE FIRST BAD LINE
╙╘┴ $─012
╠─┴ #$1┬
╙╘┴ $─011 ; 9TH BIT OF THE RASTER COMPARE
╠─┘ #0
╠─╪ #$40
╙╘╪ ┌╨+1
╙╘┘ ┌╨
╘┘┴
╠╧╧╨0 ╙╘┴ (┌╨),┘ ; ├LEAR THE WHOLE VIDEO BANK ($4000-7╞╞╞)
╔╬┘
┬╬┼ ╠╧╧╨0
╔╬├ ┌╨+1
┬╨╠ ╠╧╧╨0
╠─┴ #>╙╘┴╥╘
╙╘┴ ┌╨+1
╠─┴ #$32 ; ├HARACTER ╥╧═ TO ADDRESS SPACE ($─000-)
╙╘┴ $01
╠╧╧╨1 ╘┘┴ ; (┘-REGISTER IS ZERO INITIALLY)
╠╙╥
╠╙╥
╠╙╥
╘┴╪
╠─┴ ╘┼╪╘,╪ ; ╫HICH CHAR TO PLOT ?
┴╙╠ ; ╙OURCE
┴╙╠
┴╙╠
╘┴╪ ; LOW BYTE TO ╪
╠─┴ #$─0
┴─├ #0 ; HIGH BYTE (ONE BIT) TAKEN INTO ACCOUNT
╙╘┴ ╠╧╧╨2+2 ; ╙ELF-MODIFYING AGAIN..
╠╧╧╨2 ╠─┴ $─000,╪
╙╘┴ (┌╨),┘
╔╬╪
╔╬┘
╘╪┴
┴╬─ #7
┬╬┼ ╠╧╧╨2 ; ├OPY ONE CHAR
├╨┘ #0
┬╬┼ ╠╧╧╨1 ; ├OPY 32 CHARS (256 BYTES)
╠─┴ #$37 ; ═EMORY CONFIGURATION BACK TO NORMAL
╙╘┴ $01
╠╧╧╨3 ╠─┴ ╙╘┴╥╘,┘ ; ├OPY THE DATA TO EACH CHARSET, SHIFTED BY ONE
╙╘┴ ╙╘┴╥╘+2056,┘ ; POSITION TO THE RIGHT
╙╘┴ ╙╘┴╥╘+4112,┘
╙╘┴ ╙╘┴╥╘+6168,┘
╙╘┴ ╙╘┴╥╘+8224,┘
╙╘┴ ╙╘┴╥╘+10280,┘
╙╘┴ ╙╘┴╥╘+12336,┘
╙╘┴ ╙╘┴╥╘+14392,┘
╔╬┘
┬╬┼ ╠╧╧╨3
╠─┴ #0 ; ├LEAR THE POINTER, VALUE AND SPEED
╙╘┴ ╨╧╔╬╘┼╥
╙╘┴ ╓┴╠╒┼
╙╘┴ ╙╨┼┼─
╠╧╧╨4 ╘┘┴ ; (┘ WAS ZERO)
╧╥┴ #$80 ; ╒SE THE INVERTED CHARS
╙╘┴ ╙├╥┼┼╬,┘ ; ╙ET THE CHARACTER CODES TO VIDEO MATRIX
╙╘┴ ╙├╥┼┼╬+40,┘
╙╘┴ ╙├╥┼┼╬+80,┘
╙╘┴ ╙├╥┼┼╬+120,┘
╙╘┴ ╙├╥┼┼╬+160,┘
╙╘┴ ╙├╥┼┼╬+200,┘
╙╘┴ ╙├╥┼┼╬+240,┘
╙╘┴ ╙├╥┼┼╬+280,┘
╠─┴ #239 ; LEAVE THE LAST LINE EMPTY
╙╘┴ ╙├╥┼┼╬+320,┘
╔╬┘
├╨┘ #40
┬╬┼ ╠╧╧╨4 ; ╠OOP UNTIL THE WHOLE AREA IS FILLED
├╠╔ ; ┼NABLE INTERRUPTS
╥╘╙
╔╥╤ ╠─┴ #┬┴╬╦ ; ├HANGE THE VIDEO BANK, SOME TIMING
╙╘┴ $──00
╬╧╨
╬╧╨
╠─┘ ╨╧╔╬╘┼╥ ; ┘-REGISTER WILL POINT TO X-SHIFT
╩═╨ ┬┴─ ; NEXT LINE IS A BAD LINE
╠╧╧╨5 ╬╧╨
╠╧╧╨6 ╠─┴ ╙╚╔╞╘╠,┘ ; ─O THE SHIFT
╙╘┴ $─016 ; 3 LOWEST BITS
╠─┴ ╙╚╔╞╘╚,┘
╙╘┴ $─018 ; ANOTHER 3 BITS
╬╧╨ : ╬╧╨ : ╬╧╨ : ╬╧╨ : ╬╧╨ : ╬╧╨ ; WASTE SOME TIME
╬╧╨ : ╬╧╨ : ╬╧╨ : ╬╧╨ : ╬╧╨ : ╬╧╨
╬╧╨ : ╬╧╨ : ╬╧╨
╠─┴ $─012 ; CHECK IF IT IS TIME TO STOP
├═╨ #$78
┬╨╠ ╧╓┼╥
╔╬┘ ; NEXT POSITION IN TABLE
─┼╪
┬╬┼ ╠╧╧╨5 ; ╬O BAD LINE, LOOP
┬┴─ ╠─┴ ╙╚╔╞╘╠,┘ ; ╘HIS IS A BAD LINE, A BIT MORE HURRY
╙╘┴ $─016
╠─┴ ╙╚╔╞╘╚,┘
╙╘┴ $─018
╔╬┘
╠─╪ #7 ; ╬EW BAD LINE COMING UP
╩═╨ ╠╧╧╨6
╧╓┼╥ ╠─┴ #$97 ; ╓IDEO BANK TO 'NORMAL'
╙╘┴ $──00
╠─┴ #22 ; ╙AME WITH THE CHARSET
╙╘┴ $─018
╠─┴ #8 ; AND THE HORIZONTAL SCROLL REGISTER
╙╘┴ $─016
╠─┴ $─├00 ; ╠ET'S CHECK THE JOYSTICKS
┴╬─ $─├01
╘┴╪
╠─┘ ╙╨┼┼─
┴╬─ #8 ; ╘URNED RIGHT, ADD SPEED
┬╬┼ ┼╔╨
╔╬┘
├╨┘ #4 ; ─ON'T STORE, TOO MUCH SPEED
┬╨╠ ┼╔╨
╙╘┘ ╙╨┼┼─
┼╔╨ ╘╪┴
┴╬─ #4 ; ╘URNED LEFT
┬╬┼ ╒╠╧╙
─┼┘
├╨┘ #$╞├ ; ╘OO MUCH ?
┬═╔ ╒╠╧╙
╙╘┘ ╙╨┼┼─
╒╠╧╙ ╠─┴ ╓┴╠╒┼ ; ┴DD SPEED TO VALUE (SIGNED)
├╠├
┴─├ ╙╨┼┼─
┬╨╠ ╧╦
╠─┴ ╙╨┼┼─ ; ┬ANGED TO THE SIDE ?
┼╧╥ #$╞╞
├╠├
┴─├ #1
╙╘┴ ╙╨┼┼─
╠─┴ ╓┴╠╒┼
╧╦ ╙╘┴ ╓┴╠╒┼
╠╙╥ ; ╓ALUE IS TWICE THE SHIFT
╘┴╪ ; ╥EMEMBER THE SHIFT
┴╬─ #7 ; LOWEST 3 BITS
╧╥┴ #8 ; (SCREEN 40 CHARS WIDE)
╠─┘ ╨╧╔╬╘┼╥
╙╘┴ ╙╚╔╞╘╠,┘
╘╪┴
╠╙╥
╠╙╥
╠╙╥ ; HIGHEST 3 BITS TOO
┴╙╠ ; MULTIPLICATED BY TWO
╙╘┴ ╙╚╔╞╘╚,┘
─┼├ ╨╧╔╬╘┼╥
╠─┴ #1 ; ┴CK THE INTERRUPT
╙╘┴ $─019
╩═╨ $┼┴31 ; ╘HE NORMAL INTERRUPT ROUTINE
╘┼╪╘ ╙├╥ "╘╚╔╙ ╔╙ ╘┼├╚-╘┼├╚ ╞╧╥ ├=64 ┬┘ ═┼" ; ╘EST TEXT
; ╙├╥ CONVERTS TO SCREEN CODES
--------------------------------------------------------------------------
┬ASIC LOADER FOR THE ╘ECH-TECH DEMO PROGRAM (╨┴╠)
1 ╙=49152
2 ─┼╞╞╬╚(├)=├-48+7*(├>64)
3 ├╚=0:╥┼┴─┴$,┴:╨╥╔╬╘┴$:╔╞┴$="┼╬─"╘╚┼╬╨╥╔╬╘"<CLR>":╙┘╙49152:┼╬─
4 ╞╧╥╞=0╘╧31:╤=╞╬╚(┴╙├(═╔─$(┴$,╞*2+1)))*16+╞╬╚(┴╙├(═╔─$(┴$,╞*2+2)))
5 ├╚=├╚+╤:╨╧╦┼╙,╤:╙=╙+1:╬┼╪╘:╔╞├╚=┴╘╚┼╬3
6 ╨╥╔╬╘"├╚┼├╦╙╒═ ┼╥╥╧╥":┼╬─
100 ─┴╘┴ 78┴97╞8─0──├┴9818─1┴─0┴9┴─8─1403┴9├08─1503┴9318─12─0┴91┬8─11─0┴0, 3802
101 ─┴╘┴ 00┴24086╞├84╞┬9891╞┬├8─0╞┬┼6╞├10╞7┴94485╞├┴9328501984┴4┴4┴┴┴┬─5┼, 4749
102 ─┴╘┴ ├10┴0┴0┴┴┴┴9─069008─4┼├0┬─00─091╞┬┼8├88┴2907─0╞4├000─0──┴9378501, 4128
103 ─┴╘┴ ┬9004499084├99105499185├99206499286├99307499387├├8─0┼5┴9008─3├03, 3258
104 ─┴╘┴ 8─3─038─3┼0398098099004099284099504099784099┴04099├84099╞0409918, 3236
105 ─┴╘┴ 41┴9┼╞994041├8├028─0─┬5860┴9968─00──┼┴┼┴┴├3├034├┼1├0┼┴┬900├╞8─16, 4464
106 ─┴╘┴ ─0┬900├┼8─18─0┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┼┴┴─12─0├9781016├8├┴─0, 5850
107 ─┴╘┴ ─9┬900├╞8─16─0┬900├┼8─18─0├8┴2074├┬┬├0┴9978─00──┴9168─18─0┴9088─, 4132
108 ─┴╘┴ 16─0┴─00─├2─01─├┴┴┴├3┼032908─008├8├00410038├3┼038┴2904─00888├0╞├, 3160
109 ─┴╘┴ 30038├3┼03┴─3─03186─3┼03100┼┴─3┼0349╞╞1869018─3┼03┴─3─038─3─034┴, 2139
110 ─┴╘┴ ┴┴29070908┴├3├039900├╞8┴4┴4┴4┴0┴9900├┼├┼3├03┴9018─19─04├31┼┴1408, 2759
111 ─┴╘┴ 091320091320140503082─1405030820060╞1220033─3634200219200─050╞12, 652
200 ─┴╘┴ ┼╬─,0
--------------------------------------------------------------------------
╒UENCODED ├64 EXECUTABLE VERSION OF THE DEMO PROGRAM (╨┴╠)
BEGIN 644 TECH.64
═└0@-"└$└4[(╘.3$╒,@└╞"└(└┼╩5(*$,╔╠─.╦-#┬╩-┌╨╚0[$╓-"─└7└@#└$-(╩
═╠├└┌┴╘$─+$$┌╞4$─.╚═!)+(┬14┘$(╩>9(├╙7╥,╟4╤3╪\╨\╙2/┬(┌╟├0┘,34╥;
═.╚└└─╨@$└(%&╠├"─,╙$┌4;*┼2"├&*,╚╚020╠1╩╨╥╩├$╔*2╞╠,3:╩╔4@╚╤┬├*1
═*$$─+$:╠,╩╚╥*2─╔└+0(!0!#2+)#2*╔1.╔=3+%$┌4[)3╩├$┌@├╩+0╘┬╥0:<╙?
═└,╨(!@"9(─-(14-+4╒5-($524─]2(├╩└└!─)9└"#(#<╪03─╫1├┴$,$1$0╘$┘╬
═.#$╪1#%!1#!!.4%$.$0╤-#└╙03┼#,#┴$,34╨,╘$┘,╙$╪1#$╥1#!!.3%".$0╤+
═,40╨03└╠(#,╪,#(└9@┼┼└(,@,#!!,├0╨.#9&0╙@╘1─(┘.#─╤1─)#.$0╨1─)%╟
═-─9#,3!&-╘$┘-#0╪-49#03─╙,├@╒,#$┘.#1!-$$╘04%!0─0╒12╨@-#<╘.0"╙+
═"68└@╥!#,3!!,$$╨04%!03┼$,#8┘,#└╪1#1%0╙!"1#└╨1#└┘,49"13┴#.#┴!]
═,├─╨-╘0╨1├1#,#└╨1#!$1$$┘,╙<╪-3└╤+"└╘,3(╪└└└*9╨"#($(┘,#└╘-#─┘┼
═,#@╘0╙─┘,3└╒-#─┘,3@╒0╙─┘,├└╓-#─┘,├@╓0╙─┘,╙└╫-#─┘,╙@╫0╘,╪1#!%,
═-4$┘,#└╪1#-#,#,╠(#,╥-3@└30╔╚└(,@.$0╙1#└╙.$0╙13└╙.3@╨.3@╨.3─╨╒
═,#0╨.3─╥.#0╨.3─╒,#0╨.3─╫.#0╨.3┼!,#0╨.3┼#.#0╨.3┼&,#0╨.3─╤."╨@?
═,╙(╙-@":"╞─└@╥└╘,4$┘148┘.30╨-#%#.$,╨,├┴$,$1"-3@╓,$$┘.38╪1#└╨-
═1$1%045!04,╙0╙└╙-$-%,4,╨14%".3└╨0╘8╪1#$╓+"└╘-#8╘└.<*:@"#($0╨╬
═0├─╨,$-%.$0╤.$0╨14%%045!14%%045!14%%045!14%%045!14%%045!040╤,
═,─0╨0╙─╫.#$╨,39#.$-!1#└╠(#4╪-3└└-└═╦└(,@1#┼".3└╨0╘8╪1#$╓1#!"╤
═.3└╨0╘4╪1#$╪1#!#.$$╥,#<╘0╘)"0╙!!.3─╫.$0╨,$1$03─╤-├┴$,3┴$,$$┘_
═,#@╪1"╨@-#$╙,@"!"╓╨└@╥└╤-─0╨040╨,$1#,─0╨,41#04%!0╙-%,#,╥.3└╪╬
═1#└╨.$,╪0╙└╨-#$╨,#,╪0╙-%,#,╪03(┘,#1$,#└╪.#┴#,$9#+"└╙,38╨└,╪+'
═;0"#(#,╨,#,╪0╙-%,#-!1#-$,#,╤.#9$,╘4╨,╙$╨,$5!1#-%,#,╘.49&,3@╓7
═.3└╤.$0╙13└╙040╙1#└╙.$0╙1#└╙-$$╠(#(╤,╙─└&╨╤╬└(,@04$╥.3└╫,#─╨;
═.$%#,╘,╨,╙─┘,#!#1├┴!-$$╘031!,$$┘.3└╨0╘5#13-#,#-!.3└╤.$0╤.40╨╔
═-$,╙,45!,30╨."╨@,├<╒.0!╟#&\└@╥└╨.3$╙,├└╨.3$╙,├└╤-#└╒,#,╨.#)$_
═,30╨-3└╙,#@╥,#└╓,$8╤,├(╨,#,╙1#,╓,╙0╥,#└╥,3─╥,#!$,#4╨1├$╥+"└╓&
4-3(└<╨╙(└(,@14┘$+#└└└└└└└└╚╙!
└└
END
=============================================================================
┴├┼-128/64 ╨╥╧╟╥┴══┼╥'╙ ╥┼╞┼╥┼╬├┼ ╟╒╔─┼ (VERSION 0.9, FOR ╥ELEASE #10)
BY ├RAIG ┬RUCE <CSBRUCE@CCNGA.UWATERLOO.CA>
1. ╔╬╘╥╧─╒├╘╔╧╬
┴├┼ IS A PROGRAM FOR THE ├OMMODORE 128 AND ├OMMODORE 64 THAT PROVIDES A
COMMAND SHELL ENVIRONMENT THAT IS SIMILAR TO THAT OF ╒NIX. ╔T IS STILL
IN THE DEVELOPMENT STAGE, BUT ENOUGH OF IT IS COMPLETE TO BE USEFUL.
┬╘╫, "┴├┼" MEANS "┴DVANCED ├OMPUTING ┼NVIRONMENT" (WELL, ADVANCED FOR
THE 128/64).
╙O WHAT IS ┴├┼ ALL ABOUT? ╫ELL, ORIGINALLY ╔ TRIED A VERY AMBITIOUS
PROJECT OF WRITING A MULTITASKING OPERATING SYSTEM FOR THE 128. ╔T GOT
IT PARTIALLY WORKING, BUT IT WAS MUCH TOO FRAGILE AND INCOMPLETE TO BE
RELEASED. ╔T WAS A WHITE-ELEPHANT PROJECT. ╙O, THEN THEN IT CAME TO ME
THAT ╔ WAS AIMING MUCH TOO HIGH. ╫HAT ╔ NEEDED WAS A MUCH SIMPLER
SYSTEM, ONE THAT WOULD GIVE THE TYPE OF PROGRAMMING INTERFACE AND
BUILT-IN FEATURES THAT ╔ WANTED, BUT ONE THAT WAS CLOSE ENOUGH TO THE
├OMMODORE ╦ERNAL THAT IT WOULD NOT REQUIRE MUCH OF A PROGRAMMING EFFORT
TO HACK TOGETHER A MINIMAL IMPLEMENTATION. ┴ND THUS, THERE WAS ┴├┼-128
╥ELEASE #1. ┴ND ╔ SAW IT WAS GOOD.
╫HAT ╔ WANTED WAS A SYSTEM THAT WOULD BE EASIER TO PROGRAM THAN THE
├OMMODORE ╦ERNAL WITH ALL ITS WEIRD AND WONDERFUL DEVICE TYPES,
NON-EXISTENT MEMORY MANAGEMENT, AND SINGLE-APPLICATION DESIGN. ╘HE
FIRST IMPORTANT FEATURE OF THIS ENVIRONMENT WAS TO BE ABLE TO PASS
ARGUMENTS FROM A COMMAND LINE TO AN APPLICATION PROGRAM BY TYPING THEM
ON THE COMMAND LINE OF THE SHELL. ╔T IS SO ANNOYING TO LOAD UP A
PROGRAM IN ┬┴╙╔├, RUN IT, AND HAVE IT ASK YOU FOR FILENAMES IN SOME
HIGHLY INCONVENIENT WAY.
┴NOTHER IMPORTANT SYSTEM FEATURE IS TO MAKE NEAR AND FAR MEMORY
MANAGEMENT PART OF THE SYSTEM, AND TO MAKE FAR MEMORY CONVENIENT TO USE
FOR STORING MASSIVELY BULKY DATA. ┴ND SO IT WAS. ┴LSO, WE WANT TO USE
CUSTOM DEVICE DRIVERS. ├OMMODORE DIDN'T REALLY COME THROUGH WITH THE
DEVICE DRIVERS IT PROVIDED. ╘HEY ARE ALL ╥┼┴╠╠┘ ╙╠╧╫. ┴ND SO THAT WAS,
ALSO, ALTHOUGH MORE CUSTOM DEVICE DRIVERS ARE NEEDED. ╫E WANT TO HAVE
THE CAPABILITY OF MAKING PROGRAMS WORK TOGETHER, RATHER THAN HAVING
PROGRAMS THAT ARE TOTALLY INCOMPATIBLE. ╘HIS FUNCTIONALITY IS STILL
UNDER CONSTRUCTION. ╨ROGRAMS WILL WORK TOGETHER IN THIS UNI-TASKING
ENVIRONMENT BY ALLOWING A PROGRAM TO EXECUTE ANOTHER PROGRAM AS A
SUB-TASK, AND THEN HAVING CONTROL RETURN TO THE CALLING PROGRAM UPON
EXIT. ╞INALLY, WE WANT SOME GOOD QUALITY APPLICATIONS AND A POWERFUL
COMMAND SHELL. ╘HIS IS STILL BEING WORKED ON AND PROGRESS IS COMING
SLOWLY. ╧H, ALMOST FORGOT; WE ALSO WANT ALL PROGRAMS TO WORK ON BOTH
THE ├64 AND ├128, AND THEY DO.
╘HIS DOCUMENTATION REFERS TO ┴├┼ RELEASE #10, WHICH HAS NOT BEEN
RELEASED YET (OR EVEN PROGRAMMED). ╔N FACT, THE CURRENT RELEASE IS #9.
╥ELEASE #10 WILL BE SPRUCED UP FROM THE INSIDE OUT TO SUPPORT THE SYSTEM
INTERFACE DESCRIBED IN THIS DOCUMENT. ╘HE CURRENT RELEASE IS NOT BEING
DESCRIBED, BECAUSE SOME OF ITS FEATURES ARE NOT THE BEST THEY COULD
POSSIBLY BE. ╬OTE, HOWEVER, THAT THE BASIC FEATURES, LIKE "OPEN",
"READ", "DIRREAD", AND ARGV ARE NOT GOING TO CHANGE. ╬OTE ALSO THAT THE
VERSION NUMBER OF THIS "╨.╥.╟." IS 0.9. ╘HIS IS BECAUSE THIS IS THE
FIRST INCARNATION OF THIS DOCUMENT AND, CONSIDERING ITS NATURE, IS BOUND
TO HOLD A LARGE NUMBER OF SMALL ERRORS.
2. ╙┘╙╘┼═ ╔╬╘┼╥╞┴├┼
╘HIS SECTION DESCRIBES THE INTERFACE BETWEEN USER PROGRAMS AND THE ┴├┼
KERNEL. ╔ AM VERY CAREFUL THROUGHOUT THIS INTERFACE SPECIFICATION ABOUT
REVEALING ANY INTERNAL DETAILS THAT YOU DO NOT STRICTLY NEED TO KNOW.
╘HE INTERFACE WITH ┴├┼ IS NOT SPECIFIED IN TERMS OF ABSOLUTE ADDRESSES;
TO AID IN PORTABILITY AND EXTENSIBILITY, ALL INTERFACES ARE SPECIFIED IN
TERMS OF SYMBOLIC ASSEMBLER LABELS. ┴LL OF THE ┴├┼ CODE IS CURRENTLY
WRITTEN FOR THE ┬UDDY-128 ASSEMBLER. ┴LSO, BECAUSE THESE INTERFACE
ABSOLUTE ADDRESSES ARE SUBJECT TO CHANGE FROM VERSION TO VERSION OF THE
KERNEL, EXECUTABLES COMPILED FOR USE WITH AN OLD VERSION OF ┴├┼ MAY NOT
WORK WITH A NEW VERSION.
2.1. ┌┼╥╧-╨┴╟┼ ╓┴╥╔┴┬╠┼╙
╘HERE ARE FOUR ZERO-PAGE VARIABLES USED FOR PASSING ARGUMENTS IN MOST
SYSTEM CALLS. ╘HEY ARE AS FOLLOWS:
╙┘═┬╧╠ ┬┘╘┼╙ ─┼╙├╥╔╨╘╔╧╬
------- ----- -----------
ZP 2 ZEROPAGE POINTER
ZW 2 ZEROPAGE WORD
MP 4 MEMORY POINTER
SYSWORK 16 SYSTEM WORK AREA / ARGUMENTS
╘HE FIRST TWO, "ZP" AND "ZW" ARE USED IN MOST CALLS. ╘HEY STORE SIMPLE
16-BIT VALUES; "ZP" USUALLY STORES POINTERS TO STRINGS IN ╥┴═0 MEMORY.
╘HE "MP" VARIABLE IS 32-BITS IN LENGTH AND IS USED EXCLUSIVELY FOR
PASSING FAR MEMORY POINTERS FOR USE WITH THE FAR MEMORY ROUTINES. ┴LL
THREE OF THESE VARIABLES WILL REMAIN UNCHANGED INSIDE OF SYSTEM CALL
UNLESS THEY WILL CONTAIN A RETURN VALUE. "SYSWORK" IS A 16-BYTE ARRAY
USED MAINLY WHEN THERE ARE TOO MANY ARGUMENTS FOR OTHER VARIABLES TO
HOLD, AND ALL NON-INPUT AND NON-OUTPUT BYTES OF "SYSWORK" ARE SUBJECT TO
CHANGE BY THE KERNEL. ┴LL INPUT ARGUMENTS PLACED IN THE "SYSWORK"
LOCATIONS WILL BE PRESERVED UNLESS OTHERWISE INDICATED. [╬OTE: ╔N
╥ELEASE #9, "ZP" TOOK ON THE ROLLS OF BOTH "ZP" AND "MP"].
2.2. ╙┘╙╘┼═ ╓┴╥╔┴┬╠┼╙
╘HERE ARE SEVERAL NON-ZEROPAGE VARIABLES FOR STORING SYSTEM STATUS AND
RETURN VALUES:
╙┘═┬╧╠ ┬┘╘┼╙ ─┼╙├╥╔╨╘╔╧╬
---------- ----- -----------
ERRNO 1 ERROR NUMBER CODE RETURNED BY FAILED SYSTEM CALLS
ACE╔─ 2 PROOF THAT USER PROGRAM IS RUNNING ON TOP OF ┴├┼
ACE┴RGC 2 ARGUMENT COUNT FOR CURRENT PROCESS
ACE┴RGV 2 ARGUMENT VECTOR ADDRESS FOR CURRENT PROCESS
ACE═EM╘OP 2 HIGHEST ADDRESS, PLUS ONE, THAT USER PROG CAN USE
ACE╙HELL╨ATH 2 PTR TO STORAGE FOR SEARCH PATH FOR EXECUTABLE PROGRAMS
ACE╙HELL┴LIAS 2 PTR TO STORAGE FOR SHELL COMMAND ALIASES
ACE├UR─IR╬AME 2 PTR TO STORAGE FOR THE CURRENT DIRECTORY NAME
ACE┼XIT─ATA 2 PTR TO STORAGE FOR EXIT STATUS FROM THE LAST CALLED PRG
ACE─IRENT┬UFFER <NEXT> STORAGE FOR DIRECTORY ENTRIES READ FROM DISK
ACE─IRENT╠ENGTH - REALLY A CONSTANT: LENGTH IN BYTES OF "ACE─IRENT┬UFFER"
ACE─IRENT┬YTES 4 BYTES IN FILE (USUALLY INEXACT)
ACE─IRENT─ATE 8 DATE OF FILE IN "┘┘:┘┘:══:──:╚╚:══:╙╙:╘╫" FORMAT
ACE─IRENT╘YPE 4 TYPE OF FILE IN NULL-TERMINATED STRING
ACE─IRENT╞LAGS 1 FLAGS OF FILE, "DRWX*-ET" FORMAT
ACE─IRENT╬AME╠EN 1 LENGTH OF NAME OF FILE
ACE─IRENT╬AME 17 NULL-TERMINATED NAME OF FILE
┼╥╥╬╧: "ERRNO" IS USED TO RETURN ERROR CODES FROM SYSTEM CALLS. ╫HEN A
SYSTEM CALL ENDS IN ERROR, IT SETS THE CARRY FLAG TO "1", PUTS THE ERROR
CODE IN "ERRNO", AND RETURNS TO THE USER PROGRAM, AFTER UNDOING ANY
SYSTEM WORK COMPLETED AT THE TIME THE ERROR IS ENCOUNTERED AND ABORTING
THE OPERATION. ┴N ERROR CODE NUMBER IS STORED IN BINARY IN THE
SINGLE-BYTE "ERRNO" LOCATION. ╘HE SYMBOLIC NAMES FOR THE POSSIBLE ERROR
CODES ARE GIVEN IN THE NEXT SECTION. ╔F NO ERROR OCCURS IN A SYSTEM
CALL, THE CARRY FLAG WILL BE CLEARED ON RETURN FROM THE CALL. ╬OTE THAT
NOT ALL SYSTEM CALLS CAN RUN INTO ERRORS, SO NOT ALL SET THE CARRY FLAG
ACCORDINGLY.
╔─: "ACE╔─" IS A TWO-BYTE VARIABLE. ╔TS PURPOSE IS TO ALLOW USER
PROGRAMS TO BE SURE THAT THEY ARE EXECUTING ON TOP OF ┴├┼. ╘HE LOW BYTE
(I.E., THE FIRST BYTE) MUST BE EQUAL TO THE SYMBOLIC CONSTANT "ACE╔─1",
AND THE HIGH, "ACE╔─2". ╘HIS WILL ALLOW ┴├┼ APPLICATIONS TO INFORM IDIOT
USERS THAT THEY CANNOT SIMPLY ┬╧╧╘ THE PROGRAM FROM ┬┴╙╔├, BUT RATHER
THEY MUST RUN ┴├┼ FIRST.
┴╥╟├: "ACE┴RGC" IS A TWO-BYTE UNSIGNED NUMBER. ╔T GIVES THE NUMBER OF
ARGUMENTS PASSED TO THE APPLICATION BY THE PROGRAM (USUALLY THE COMMAND
SHELL) THAT CALLED THE APPLICATION. ╘HE FIRST ARGUMENT IS ALWAYS THE
NAME OF THE APPLICATION PROGRAM, SO THE COUNT WILL ALWAYS BE AT LEAST
ONE. ╧THER ARGUMENTS ARE OPTIONAL.
┴╥╟╓: "ACE┴RGV" IS A TWO-BYTE ╥┴═0 POINTER. ╨AY ATTENTION. ╘HIS
POINTER POINTS TO THE FIRST ENTRY OF AN ARRAY OF TWO-BYTE POINTERS WHICH
POINT TO THE NULL-TERMINATED STRINGS THAT ARE THE ARGUMENTS PASSED TO
THE APPLICATION PROGRAM BY THE CALLER. (┴ NULL-TERMINATED STRING IS ONE
THAT ENDS WITH A ZERO BYTE). ╘O FIND THE ADDRESS OF THE ╬-TH ARGUMENT
TO AN APPLICATION, MULTIPLY ╬ BY TWO, ADD THE "ACE┴RGV" CONTENTS TO
THAT, AND FETCH THE POINTER FROM THAT ADDRESS. ╔N THIS SCHEME, THE
EVER-PRESENT APPLICATION NAME IS THE 0-TH ARGUMENT. ╘HE ARGV[ARGC]
ELEMENT OF THE ARGUMENT VECTOR WILL ALWAYS CONTAIN A VALUE OF $0000, A
NULL POINTER.
═┼═-╘╧╨: "ACE═EM╘OP" IS A TWO-BYTE ╥┴═0 POINTER. ╘HIS POINTS TO ONE
BYTE PAST THE HIGHEST BYTE THAT THE APPLICATION PROGRAM IS ALLOWED TO
USE. ┴LL APPLICATION PROGRAMS ARE LOADED INTO MEMORY AT ADDRESS
"ACE┴PP┴DDRESS" (NEXT SECTION), AND ALL MEMORY BETWEEN THE END OF THE
PROGAM CODE AND "ACE═EM╘OP" CAN BE USED FOR TEMPORARY VARIABLES, FILE
BUFFERS, ETC. ╘HE MAIN PROBLEM WITH THIS APPROACH IS THAT THERE ARE NO
GUARANTEES ABOUT HOW MUCH MEMORY YOUR APPLICATION WILL GET TO PLAY WITH.
═ANY APPLICATIONS, SUCH AS SIMPLE FILE UTILITIES, CAN SIMPLY USE ALL
AVAILABLE MEMORY FOR A FILE BUFFER, BUT OTHER PROGRAMS, SUCH AS A FILE
COMPRESSOR, MAY HAVE MUCH GREATER DEMAND FOR "NEAR" MEMORY. [╬OTE: THIS
VARIABLE HAS A DIFFERENT NAME IN ╥ELEASE #9].
╙╚┼╠╠-╨┴╘╚: "ACE╙HELL╨ATH" IS A TWO-BYTE ╥┴═0 POINTER. ╘HIS POINTS TO
THE PAGE OF MEMORY THAT STORES THE PATHNAMES OF DIRECTORIES TO SEARCH
THROUGH IN ORDER TO FIND EXECUTABLE FILES. ┼ACH PATHNAME IS STORED AS A
NULL-TERMINATED STRING, AND THE LIST IS TERMINATED BY AN EMPTY STRING
(CONTAINING ONLY THE ZERO CHARACTER). ╘HIS IS INTENDED TO BE USED BY
THE SHELL PROGRAM, OR ANY OTHER PROGRAM THAT IS SO INCLINED, TO EXAMINE
OR ALTER THE SEARCH PATH. ╘HE SEARCH PATHS SPECIFIED IN THE PATH PAGE
ARE GLOBAL VARIABLES AND ARE USED BY ALL PROGRAMS THAT MAKE THE "EXEC"
SYSTEM CALL. ╘HIS MECHANISM FOR READING/ALTERING THE EXECUTABLE SEARCH
PATH MAY BE CHANGED IN THE FUTURE.
╙╚┼╠╠-┴╠╔┴╙: "ACE╙HELL┴LIAS" IS A TWO-BYTE ╥┴═0 POINTER. ╘HIS POINTS TO
THE PAGE OF MEMORY THAT STORES THE ALIASES TO BE USED WITH THE COMMAND
SHELL. ┴N ALIAS IS A STRING THAT IS SUBSTITUTED IN THE PLACE OF A
COMMAND NAME ON A SHELL COMMAND LINE WHENEVER A CERTAIN COMMAND NAME
COMES UP. ╞OR EXAMPLE, YOU MIGHT SPECIFY IF THE USER ENTERS THE COMMAND
"LIST A:" THAT THE COMMAND NAME "LIST" BE STRING-REPLACED WITH "CLS;XLS
-L". ┼ACH ALIAS IS STORED WITH THE COMMAND NAME FIRST, FOLLOWED BY AN
EQUALS CHARACTER ("="), FOLLOWED BY THE STRING TO SUBSTITUTE, FOLLOWED
BY A ZERO. ╘HE ALIAS LIST IS TERMINATED BY AN EMPTY STRING. ╘HIS
MECHANISM MAY BE EXTENDED IN THE FUTURE TO ALLOW MULTIPLE PAGES OF
ALIASES, OR MAY BE CHANGED COMPLETELY.
├╒╥-─╔╥-╬┴═┼: "ACE├UR─IR╬AME" IS A TWO-BYTE ╥┴═0 POINTER. ╔T POINTS TO
THE NULL-TERMINATED STRING INDICATING THE CURRENT DIRECTORY. ╘HE USER
IS NOT SUPPOSED TO MODIFY THIS VALUE, AND THE VALUE WILL NOT ALWAYS GIVE
A FULL PATHNAME. ╘HE IMPLEMENTATION OF THIS FEATURE MAY NEED TO CHANGE
IN FUTURE VERSIONS OF ┴├┼.
┴├┼-┼╪╔╘-─┴╘┴: "ACE┼XIT─ATA" IS A TWO-BYTE ╥┴═0 POINTER. ╔T POINTS TO
THE 256-BYTE BUFFER ALLOCATED FOR USER PROGRAMS TO GIVE DETAILED RETURN
INFORMATION UPON EXITING BACK TO THEIR PARENT PROGRAM. ╙EE THE "EXIT"
SYSTEM CALL. ╒SER PROGRAMS ARE ALLOWED TO READ AND WRITE THIS STORAGE.
┴N EXAMPLE USE OF THIS FEATURE WOULD BE A COMPILER PROGRAM RETURNING THE
LINE NUMBER AND CHARACTER POSITION, AND DESCRIPTION OF A COMPILATION
ERROR TO A TEXT EDITOR, SO THE EDITOR CAN POSITION THE CURSOR AND
DISPLAY THE ERROR MESSAGE FOR USER CONVENIENCE. ╘HE IMPLEMENTATION OF
THIS FEATURE MAY NEED TO CHANGE IN FUTURE VERSIONS OF ┴├┼.
─╔╥┼╬╘-┬╒╞╞┼╥: "ACE─IRENT┬UFFER" IS A BUFFER USED FOR STORING DIRECTORY
INFORMATION READ WITH THE "DIRREAD" SYSTEM CALL, AND IS
"ACE─IRENT╠ENGTH" BYTES LONG. ╧NLY A SINGLE DIRECTORY ENTRY IS
(LOGICALLY) READ FROM DISK AT A TIME. ╘HE INDIVIDUAL FIELDS OF A READ
DIRECTORY ENTRY ARE ACCESSED BY THE FIELDS DESCRIBED NEXT. ╘HIS FIELD
IS ALSO USED FOR RETURNING DISK NAME INFORMATION AND THE NUMBER OF BYTES
FREE ON A DISK DRIVE (SEE THE "DIRREAD" SYSTEM CALL).
─╔╥┼╬╘-┬┘╘┼╙: "ACE─IRENT┬YTES" IS A FOUR-BYTE (32-BIT) UNSIGNED FIELD.
┴S ALWAYS, THE BYTES ARE ADDRESSED FROM LEAST SIGNIFICANT TO MOST
SIGNIFICANT. ╘HIS FIELD GIVES THE NUMBER OF BYTES IN THE FILE. ╬OTE
THAT THIS VALUE MAY NOT BE EXACT, SINCE ├OMMODORE DECIDED TO STORE SIZES
IN DISK BLOCKS RATHER THAN BYTES. ╞OR DEVICES THAT REPORT ONLY BLOCK
COUNTS (I.E., EVERY DISK DEVICE CURRENTLY SUPPORTED), THE NUMBER OF
BYTES RETURNED IS THE NUMBER OF BLOCKS MULTIPLIED BY 254. ╘HIS FIELD,
AS WELL AND THE OTHER DIRENT FIELDS ARE ABSOLUTE ADDRESSES, NOT OFFSETS
FROM ACE─IRENT┬UFFER.
─╔╥┼╬╘-─┴╘┼: "ACE─IRENT─ATE" IS AN EIGHT-BYTE ARRAY OF BINARY CODED
DECIMAL VALUES, STORED FROM MOST SIGNIFICANT DIGITS TO LEAST
SIGNIFICANT. ╘HE FIRST BYTE CONTAINS THE ┬├─ CENTURY, THE SECOND THE
YEAR, AND SO ON, AND THE LAST BYTE CONTAINS THE NUMBER OF TENTHS OF
SECONDS IN ITS MOST SIGNIFICANT NYBBLE AND A CODE FOR THE DAY-OF-WEEK IN
ITS LEAST SIGNIFICANT NYBBLE. ╙UNDAY HAS CODE 1, ═ONDAY 2, ETC.,
╙ATURDAY 7, AND A CODE OF 0 MEANS "UNKNOWN". ╘HIS IS THE STANDARD
FORMAT FOR ALL DATES USED IN ┴├┼. ╘HIS FORMAT IS ABSTRACTED AS
"┘┘:┘┘:══:──:╚╚:══:╙╙:╘╫". ╞OR DISK DEVICES THAT DON'T SUPPORT DATES,
THIS FIELD WILL BE SET TO ALL ZEROES, WHICH CAN BE CONVENIENTLY
INTERPRETED AS THE ╬╒╠╠ DATE, NEGATIVE INFINITY, OR AS THE TIME THAT
╩.├. WAS A SEVEN-YEAR-OLD BOY.
─╔╥┼╬╘-╘┘╨┼: "ACE─IRENT╘YPE" IS A THREE-CHARACTER (FOUR-BYTE)
NULL-TERMINATED STRING. ╔T INDICATES WHAT TYPE THE FILE IS, IN
LOWERCASE ╨┼╘╙├╔╔. ╙TANDARD TYPES SUCH AS "╙┼╤" AND "╨╥╟" WILL BE
RETURNED, AS WELL AND OTHER POSSIBILITIES FOR CUSTOM DEVICE DRIVERS.
─╔╥┼╬╘-╞╠┴╟╙: "ACE─IRENT╞LAGS" IS A ONE-BYTE FIELD THAT IS INTERPRETED
AS CONSISTING OF EIGHT INDEPENDENT ONE-BIT FIELDS. ╘HE ABSTRACT VIEW OF
THE FIELDS IS "DRWX*-ET". "D" MEANS THAT THE ITEM IS A SUBDIRECTORY
(OTHERWISE IT IS A REGULAR FILE), "R" MEANS THE ITEM IS READABLE, "W"
MEANS THE ITEM IS WRITABLE, AND "X" MEANS THE ITEM IS EXECUTABLE. ╘HE
"X" OPTION IS REALLY NOT SUPPORTED CURRENTLY. "*" MEANS THE ITEM IS
IMPROPERLY CLOSED (A "SPLAT" FILE IN ├OMMODORE-─╧╙ TERMINOLOGY). ╘HE
"-" FIELD IS CURRENTLY UNDEFINED. "E" MEANS THAT THE VALUE GIVEN IN THE
"ACE─IRENT┬YTES" FIELD IS ACTUALLY EXACT, AND "T" MEANS THE FILE SHOULD
BE INTERPRETED AS BEING A "TEXT" FILE (OTHERWISE, ITS TYPE IS EITHER
BINARY OR UNKNOWN). ╘HE BIT FIELDS ARE ALL BOOLEANS; A VALUE OF "1"
MEANS TRUE, "0", FALSE. ╘HE "D" BIT OCCUPIES THE 128-BIT POSITION, ETC.
─╔╥┼╬╘-╬┴═┼-╠┼╬: "ACE─IRENT╬AME╠EN" IS A ONE-BYTE NUMBER. ╔T GIVES THE
NUMBER OF CHARACTERS IN THE FILENAME. ╔T IS PRESENT FOR CONVENIENCE.
─╔╥┼╬╘-╬┴═┼: "ACE─IRENT╬AME" IS A 16-CHARACTER (17-BYTE) NULL-TERMINATED
CHARACTER STRING FIELD. ╔T GIVES THE NAME OF THE FILE OR DIRECTORY OR
DISK. ╞ILENAMES USED WITH ┴├┼ ARE LIMITED TO 16 CHARACTERS.
2.3. ╙┘╙╘┼═ ├╧╬╙╘┴╬╘╙
╘HERE ARE SEVERAL SYMBOLIC CONSTANTS THAT ARE USED WITH THE ┴├┼ SYSTEM
INTERFACE:
╙┘═┬╧╠ ─┼╙├╥╔╨╘╔╧╬
------------------- -------------------------
ACE┴PP┴DDRESS THE START ADDRESS OF APPLICATIONS
ACE╔─1 THE ID CHARACTERS USED TO IDENTIFY ┴├┼ APPLICATIONS
ACE╔─2 ...
ACE╔─3 ...
ACE═EM╬ULL THE FAR MEMORY TYPE CODE USED TO INDICATE NULL PTRS
ACE═EM╥┼╒ FAR MEM TYPE CODE FOR ╥AM ┼XPANSION ╒NIT MEMORY
ACE═EM╔NTERNAL FAR MEM TYPE CODE FOR INTERNAL MEMORY
ACE═EM╥╠╥┼╒ FAR MEM TYPE CODE FOR ╥┼╒ MEMORY ACCESSED THRU ╥┴═╠INK
ACE═EM╥╠ FAR MEM TYPE CODE FOR DIRECT-ACCESS ╥┴═╠INK MEMORY
ACE┼RR╙TOPPED ERROR CODE FOR SYSCALL ABORTED BY ╙╘╧╨ KEY
ACE┼RR╘OO═ANY╞ILES ERR: TOO MANY FILES ALREADY OPENED TO OPEN ANOTHER
ACE┼RR╞ILE╧PEN ERR: DON'T KNOW WHAT THIS MEANS
ACE┼RR╞ILE╬OT╧PEN ERR: THE GIVEN FILE DESCRIPTOR IS NOT ACTUALLY OPEN
ACE┼RR╞ILE╬OT╞OUND ERR: NAMED FILE TO OPEN FOR READING DOES NOT EXIST
ACE┼RR─EVICE╬OT╨RESENT ERR: THE SPECIFIED PHYSICAL DEVICE IS NOT ONLINE
ACE┼RR╞ILE╬OT╔NPUT ERR: FILE CANNOT BE OPENED FOR READING
ACE┼RR╞ILE╬OT╧UTPUT ERR: FILE CANNOT BE OPENED FOR WRITING
ACE┼RR═ISSING╞ILENAME ERR: PATHNAME COMPONENT IS THE NULL STRING
ACE┼RR╔LLEGAL─EVICE ERR: THE SPECIFIED DEVICE CANNOT DO WHAT YOU WANT
ACE┼RR╫RITE╨ROTECT ERR: TRYING TO WRITE TO A DISK THAT IS WRITE-PROTECTED
ACE┼RR╞ILE┼XISTS ERR: TRYING TO OPEN FOR WRITING FILE THAT EXISTS
ACE┼RR╞ILE╘YPE═ISMATCH ERR: YOU SPECIFIED THE FILE TYPE INCORRECTLY
ACE┼RR╬O├HANNEL ERR: TOO MANY OPEN FILES ON DISK DRIVE TO OPEN ANOTHER
ACE┼RR╔NSUFFICIENT═EMORY ERR: ┴├┼ COULD NOT ALLOCATE THE MEMORY YOU REQUESTED
ACE┼RR╧PEN─IRECTORY ERR: YOU ARE TRYING TO OPEN A DIR AS IF IT WERE A FILE
ACE┼RR─ISK╧NLY╧PERATION ERR: TRYING TO PERFORM DISK-ONLY OP ON CHAR DEVICE
ACE┼RR╬ULL╨OINTER ERR: TRYING TO DEREFERENCE A NULL FAR POINTER
ACE┼RR╔NVALID╞REE╨ARMS ERR: BAD CALL TO "PAGEFREE": MISALIGNED/WRONG SIZE
ACE┼RR╞REE╬OT╧WNED ERR: TRYING TO FREE FAR MEMORY YOU DON'T OWN
STDIN FILE DESCRIPTOR RESERVED FOR STDIN INPUT STREAM
STDOUT FILE DESCRIPTOR RESERVED FOR STDOUT OUTPUT STREAM
STDERR FILE DESCRIPTOR RESERVED FOR STDERR OUTPUT STREAM
"ACE┴PP┴DDRESS", AS DISCUSSED BEFORE, IS THE ADDRESS THAT APPLICATION
PROGRAMS ARE LOADED INTO MEMORY AT. ╘HEY MUST, OF COURSE, BE COMPILED
TO EXECUTE STARTING AT THIS ADDRESS.
╘HE "ACE═EM" GROUP OF CONSTANTS ARE FOR USE WITH THE "PAGEALLOC" SYSTEM
CALL, EXCEPT FOR "ACE═EM╬ULL", WHICH MAY BE USED BY APPLICATION PROGRAMS
FOR INDICATING NULL FAR POINTERS. ╘HE "PAGEALLOC" CALL ALLOWS YOU TO
SPECIFY WHAT TYPES OF MEMORY YOU ARE WILLING TO ACCEPT. ╘HIS IS
IMPORTANT BECAUSE THE DIFFERENCE TYPES OF MEMORY HAVE DIFFERENT
PERFORMANCE CHARACTERISTICS. ┴├┼ WILL TRY TO GIVE YOU THE FASTEST
MEMORY THAT IS AVAILABLE. ╥AM ┼XPANSION ╒NIT MEMORY HAS STARTUP AND
BYTE-TRANSFER TIMES OF ABOUT 60 US (MICROSECONDS) AND 1 US,
RESPECTIVELY. ╘HIS IS THE FASTEST TYPE OF FAR MEMORY. ╔NTERNAL MEMORY
HAS A STARTUP TIME OF 24 US AND A BYTE-TRANSFER TIME OF BETWEEN 7 AND 14
US (DEPENDING ON WHETHER ACCESSING ╥┴═0 OR ╥┴═1+). ╥┼╒ MEMORY ACCESSED
THROUGH A ╥┴═╠INK HAS A TERRIBLE STARTUP TIME OF 1000 US AND A
BYTE-TRANSFER TIME OF 2 US. ─IRECT-ACCESS ╥┴═╠INK MEMORY HAS A STARTUP
TIME OF 1000 US AND A BYTE-TRANSFER TIME OF 16 US. ┴LL THESE TIMES ARE
FOR THE ├128 IN 2 ═╚Z MODE.
╘HE "ACE┼RR" GROUP GIVES THE ERROR CODES RETURNED BY SYSTEM CALLS. ╘HE
ERROR CODES ARE RETURNED IN THE "ERRNO" VARIABLE. ╬OT ALL POSSIBLE
ERROR CODES FROM ├OMMODORE DISK DRIVES ARE COVERED, BUT THE IMPORTANT
ONES ARE. ╞INALLY, THE "STD" FILES GROUP GIVE THE SYMBOLIC FILE
DESCRIPTOR IDENTIFIERS OF THE DEFAULT INPUT, OUTPUT, AND ERROR OUTPUT
FILE STREAMS.
2.4. ╙┘╙╘┼═ ├┴╠╠╙
┴LL SYSTEM CALLS ARE CALLED BY SETTING UP ARGUMENTS IN SPECIFIED
PROCESSOR REGISTERS AND MEMORY LOCATIONS, EXECUTING A ╩╙╥ TO THE SYSTEM
CALL ADDRESS, AND PULLING THE RETURN VALUES OUT OF PROCESSOR REGISTERS
AND MEMORY LOCATIONS.
2.1. ╞╔╠┼ ├┴╠╠╙
╬┴═┼ : OPEN
╨╒╥╨╧╙┼: OPEN A FILE
┴╥╟╙ : (ZP) = PATHNAME
.┴ = FILE MODE ("R", "W", OR "A")
╥┼╘╒╥╬╙: .┴ = FILE DESCRIPTOR NUMBER
.├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .╪, .┘, ERRNO
╧PENS A FILE. ╘HE NAME OF THE FILE IS GIVEN BY A POINTER TO A
NULL-TERMINATED STRING, AND MAY CONTAIN DEVICE NAMES AND PATHNAMES AS
SPECIFIED IN THE ┴├┼ USER DOCUMENTATION. ╘HE FILE MODE IS A ╨┼╘╙├╔╔
CHARACTER. "R" MEANS TO OPEN THE FILE FOR READING, "W" MEANS TO OPEN
THE FILE FOR WRITING, AND "A" MEANS TO OPEN THE FILE FOR APPENDING
(WRITING, STARTING AT THE END OF THE FILE). ┴N ERROR WILL BE RETURNED
IF YOU ATTEMPT TO OPEN FOR READING OR APPENDING A FILE THAT DOES NOT
EXIST, OR IF YOU ATTEMPT TO OPEN FOR WRITING A FILE THAT DOES ALREADY
EXIST. ╔F YOU WISH TO OVERWRITE AN EXISTING FILE, YOU WILL HAVE TO CALL
"REMOVE" TO DELETE THE OLD VERSION BEFORE OPENING THE NEW VERSION FOR
WRITING.
╘HE FUNCTION RETURNS A FILE DESCRIPTOR NUMBER, WHICH IS A SMALL UNSIGNED
INTEGER THAT IS USED WITH OTHER FILE CALLS TO SPECIFY THE FILE THAT HAS
BEEN OPENED. ╞ILE DESCRIPTORS NUMBERED 0, 1, AND 2 ARE USED FOR STDIN,
STDOUT, AND STDERR, RESPECTIVELY. ╘HE FILE DESCRIPTOR RETURNED WILL BE
THE MINIMUM NUMBER THAT IS NOT CURRENTLY IN USE. ╘HESE NUMBERS ARE
SYSTEM-WIDE (RATHER THAN LOCAL TO A PROCESS AS IN ╒NIX), AND THIS HAS
SOME IMPLICATIONS FOR ╔/╧ REDIRECTION (SEE THE "FDSWAP" CALL BELOW).
╥ESTRICTIONS: ONLY SO MANY ╦ERNAL FILES ALLOWED TO BE OPEN ON A DISK
DEVICE, AND THERE IS A SYSTEM MAXIMUM OF OPEN FILES. ┘OU WILL GET A
"TOO MANY FILES" ERROR IF YOU EVER EXCEED THIS LIMIT. ┴LSO, BECAUSE OF
THE NATURE OF ├OMMODORE-─╧╙, THERE MAY BE EVEN TIGHTER RESTRICTIONS ON
THE NUMBER OF FILES THAT CAN BE SIMULTANEOUSLY OPEN ON A SINGLE DISK
DEVICE, RESULTING IN A "NO CHANNEL" ERROR. ╬OTE THAT THIS CALL CHECKS
THE STATUS CHANNEL OF ├OMMODORE DISK DRIVES ON EACH OPEN, SO YOU DON'T
HAVE TO (AND SHOULD NOT ANYWAY).
╔F THE CURRENT PROGRAM EXITS EITHER BY CALLING "EXIT" OR SIMPLY BY DOING
THE LAST ╥╘╙, ALL FILES THAT WERE OPENED BY THE PROGRAM AND ARE STILL
OPEN WILL BE AUTOMATICALLY CLOSED BY THE SYSTEM BEFORE RETURNING TO THE
PARENT PROGRAM.
╬┴═┼ : CLOSE
╨╒╥╨╧╙┼: CLOSE AN OPEN FILE
┴╥╟╙ : .┴ = ╞ILE DESCRIPTOR NUMBER
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
├LOSES AN OPEN FILE. ╬OT MUCH TO SAY ABOUT THIS ONE.
╬┴═┼ : READ
╨╒╥╨╧╙┼: READ DATA FROM AN OPEN FILE
┴╥╟╙ : .╪ = ╞ILE DESCRIPTOR NUMBER
(ZP) = POINTER TO BUFFER TO STORE DATA INTO
.┴┘ = MAXIMUM NUMBER OF BYTES TO READ
╥┼╘╒╥╬╙: (ZW) = .┴┘=NUMBER OF BYTES ACTUALLY READ IN
.├╙ = ERROR OCCURRED FLAG
.┌╙ = ┼╧╞ REACHED FLAG
┴╠╘┼╥╙ : .╪, ERRNO
╥EADS DATA FROM THE CURRENT POSITION OF AN OPEN FILE. ╒P TO THE
SPECIFIED MAXIMUM NUMBER OF BYTES WILL BE READ. ┘OU SHOULD NOT GIVE A
MAXIMUM OF ZERO BYTES, OR YOU MAY MISINTERPRET AN ┼╧╞ (END OF FILE).
╘HE BUFFER MUST BE AT LEAST THE SIZE OF THE MAXIMUM NUMBER OF BYTES TO
READ. ╘HE DATA ARE NOT INTERPRETED IN ANY WAY, SO IT IS THE
PROGRAMMER'S RESPONSIBILITY TO SEARCH FOR CARRIAGE RETURN CHARACTERS TO
LOCATE LINES OF INPUT, IF HE SO DESIRES. ╚OWEVER, FOR THE CONSOLE THE
INPUT IS NATURALLY DIVIDED UP INTO LINES, SO EACH CALL WILL RETURN AN
ENTIRE LINE OF BYTES IF THE BUFFER IS LARGE ENOUGH. ╘HERE ARE NO
GUARANTEES ABOUT THE NUMBER OF BYTES THAT WILL BE RETURNED, EXCEPT THAT
IT WILL BE BETWEEN 1 AND THE BUFFER SIZE. ╙O, IF YOU WISH TO READ A
CERTAIN NUMBER OF BYTES, YOU MAY HAVE TO MAKE MULTIPLE READ CALLS.
╘HE CALL RETURNS THE NUMBER OF BYTES READ IN BOTH THE .┴┘ REGISTER PAIR
AND IN (ZW), FOR ADDED CONVENIENCE. [╬OTE: IN ┴├┼ ╥ELEASE #9, THE
NUMBER OF BYTES READ ARE RETURNED ONLY IN THE .┴┘ REGISTERS, NOT IN
(ZW).] ┴ RETURN OF ZERO BYTES READ MEANS THAT THE END OF THE FILE HAS
BEEN REACHED. ┴N ATTEMPT TO READ BEYOND THE END OF FILE WILL SIMPLY
GIVE ANOTHER ┼╧╞ RETURN. ┼ND OF FILE IS ALSO RETURNED IN THE .┌ FLAG OF
THE PROCESSOR.
╬┴═┼ : WRITE
╨╒╥╨╧╙┼: WRITE DATA TO AN OPEN FILE
┴╥╟╙ : .╪ = FILE DESCRIPTOR NUMBER
(ZP) = POINTER TO DATA TO BE WRITTEN
.┴┘ = LENGTH OF DATA TO BE WRITTEN IN BYTES
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
╫RITES DATA AT THE CURRENT POSITION OF AN OPEN FILE. [╬OTE: ┴├┼ ╥ELEASE
#9 ALSO ALTERS LOCATIONS (ZW) WHEN WRITING TO THE CONSOLE. ╘HIS PROBLEM
WILL BE CORRECTED.]
╬┴═┼ : FASTOPEN
╨╒╥╨╧╙┼: OPEN A FILE FOR FAST READING
┴╥╟╙ : (ZP) = ╬AME
.┴ = FILE MODE (MUST BE "R")
╥┼╘╒╥╬╙: .┴ = FILE DESCRIPTOR NUMBER
.├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .╪, .┘, ERRNO
╘HIS PERFORMS THE SAME FUNCTION AS THE REGULAR "OPEN" CALL, EXCEPT THIS
STYLE OF FILE ACCESSING WILL ALLOW FILES TO BE READ MUCH FASTER THAN THE
OTHER. ╧N DEVICES THAT ARE SO EQUIPPED, THE "FASTLOAD" BURST COMMAND IS
USED (SIMILAR SHORTCUTS MAY BE POSSIBLE WITH OTHER DEVICES TOO). ╘HE
DRAWBACK OF THIS INCREASED SPEED IS THAT NO OTHER DEVICE ╔/╧ CAN TAKE
PLACE WHILE A FILE IS OPENED FOR "FAST" ACCESS, NOT EVEN TO OTHER
DEVICES, EXCEPT FOR OUTPUT TO THE CONSOLE. ╧THER FILES CAN BE OPEN,
JUST NOT ACCESSED. ┘OU ALSO CANNOT OPEN MORE THAN ONE "FAST" FILE AT A
TIME. ╔NTERRUPTS WILL BE DISABLED WHILE A FILE IS OPEN FOR FAST
ACCESSING, SO THE USER CANNOT RE-ENABLE THEM, FOR TECHNICAL REASONS.
╘HE ARGUMENTS TO THIS CALL ARE EXACTLY THE SAME AS THE REGULAR "OPEN" TO
MAKE IT EASY TO SWITCH FROM USING ONE TO THE OTHER. [╬OTE: THESE "FAST"
CALLS DO NOT EXIST IN ╥ELEASE #9].
╬┴═┼ : FASTCLOSE
╨╒╥╨╧╙┼: CLOSE THE FILE THAT WAS OPENED FOR FAST READING
┴╥╟╙ : .┴ = ╞ILE DESCRIPTOR NUMBER
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
├LOSES THE FILE THAT WAS OPENED FOR FAST READING.
╬┴═┼ : FASTREAD
╨╒╥╨╧╙┼: READ DATA FROM THE FILE OPENED FOR FAST READING
┴╥╟╙ : .╪ = ╞ILE DESCRIPTOR NUMBER
(ZP) = POINTER TO BUFFER TO STORE DATA INTO
.┴┘ = MAXIMUM NUMBER OF BYTES TO READ
╥┼╘╒╥╬╙: (ZW) = .┴┘=NUMBER OF BYTES ACTUALLY READ IN
.├╙ = ERROR OCCURRED FLAG
.┌╙ = ┼╧╞ REACHED FLAG
┴╠╘┼╥╙ : .╪, ERRNO
╥EAD DATA FROM THE (ONE) FILE THAT IS CURRENTLY OPENED FOR "FAST"
READING. ╘HE ARGUMENTS AND SEMANTICS ARE EQUIVALENT TO THE REGULAR
"READ" CALL.
╬┴═┼ : BLOAD
╨╒╥╨╧╙┼: BINARY LOAD
┴╥╟╙ : (ZP) = PATHNAME
.┴┘ = ADDRESS TO LOAD FILE
(ZW) = HIGHEST ADDRESS THAT FILE MAY OCCUPY, PLUS ONE
╥┼╘╒╥╬╙: .┴┘ = END ADDRESS OF LOAD, PLUS ONE
.├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .╪, ERRNO
┬INARY-LOAD A FILE DIRECTLY INTO MEMORY. ╔F THE FILE WILL NOT FIT INTO
THE SPECIFIED SPACE, AN ERROR WILL BE RETURNED AND THE LOAD TRUNCATED IF
THE DEVICE SUPPORTS TRUNCATION; OTHERWISE, IMPORTANT DATA MAY BE
OVERWRITTEN.
╬┴═┼ : REMOVE
╨╒╥╨╧╙┼: DELETE A FILE
┴╥╟╙ : (ZP) = PATHNAME
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
─ELETE THE NAMED FILE.
╬┴═┼ : RENAME
╨╒╥╨╧╙┼: RENAME A FILE OR DIRECTORY
┴╥╟╙ : (ZP) = OLD FILENAME
(ZW) = NEW FILENAME
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
╥ENAMES A FILE OR DIRECTORY. ╔F A FILE WITH THE NEW NAME ALREADY
EXISTS, THEN THE OPERATION WILL BE ABORTED AND A "FILE EXISTS" ERROR
WILL BE RETURNED. ╧N MOST DEVICES, THE FILE TO BE RENAMED MUST BE IN
THE CURRENT DIRECTORY AND THE NEW NAME MAY NOT INCLUDE ANY PATH, JUST A
FILENAME.
╬┴═┼ : DEVINFO
╨╒╥╨╧╙┼: GIVE INFORMATION ABOUT DEVICE
┴╥╟╙ : .╪ = FILE DESCRIPTOR NUMBER
╥┼╘╒╥╬╙: .┴ = DEVICE TYPE CODE
.╪ = NUMBER OF COLUMNS ON DEVICE
.┘ = NUMBER OF ROWS PER "PAGE" OF DEVICE
.├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : ERRNO
╘HIS CALL RETURNS INFORMATION ABOUT THE DEVICE OF AN OPEN FILE. ╘HERE
ARE FOUR POSSIBLE VALUES FOR THE DEVICE TYPE CODE: 0==CONSOLE,
1==CHARACTER-ORIENTED DEVICE, AND 2==DISK DEVICE. ╘HE NUMBER OF ROWS
AND COLUMNS PER "PAGE" OF THE DEVICE ARE ALSO RETURNED. ╞OR THE
CONSOLE, THIS WILL BE THE CURRENT WINDOW SIZE. ╞OR A CHARACTER-ORIENTED
DEVICE, IT WILL BE THE NATURAL SIZE (TYPICALLY 80 COLUMNS BY 66 ROWS),
AND FOR A DISK, IT WILL BE 40 COLUMNS IN 64 MODE OR 80 COLUMNS IN 128
MODE, BOTH BY 66 ROWS.
╬┴═┼ : FDSWAP
╨╒╥╨╧╙┼: SWAP TWO FILE DESCRIPTOR NUMBERS
┴╥╟╙ : .╪ = FIRST FILE DESCRIPTOR NUMBER
.┘ = SECOND FILE DESCRIPTOR NUMBER
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
╘HIS CALL SWAPS MEANINGS OF TWO FILE DESCRIPTOR NUMBERS. ╘HE FILE
DESCRIPTORS MAY BE EITHER IN USE OR NOT USE WHEN THE CALL IS MADE. ╘HIS
CALL IS INTENDED TO BE USED TO REDIRECT THE STDIN, STDOUT, AND STDERR
FILE STREAMS. ╘O DO THIS, SIMPLY OPEN THE NEW FILE INTENDED TO BE, FOR
EXAMPLE, STDOUT, AND SWAP THE FILE DESCRIPTOR NUMBER RETURNED FROM THE
OPEN WITH FILE DESCRIPTOR NUMBER 1 (STDOUT). ╨OOF. ╘HEN CALL YOUR
SUBROUTINE OR EXTERNAL PROGRAM, AND ON RETURN, SWAP THE TWO FILE
DESCRIPTORS BACK, AND CLOSE THE REDIRECTION FILE.
2.2. ─╔╥┼├╘╧╥┘ ├┴╠╠╙
╬┴═┼ : DIROPEN
╨╒╥╨╧╙┼: OPEN A DIRECTORY FOR SCANNING ITS DIRECTORY ENTRIES
┴╥╟╙ : (ZP) = DIRECTORY PATHNAME
╥┼╘╒╥╬╙: .┴ = FILE DESCRIPTOR NUMBER
.├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .╪, .┘, ERRNO
╘HIS CALL OPENS A DIRECTORY FOR READING ITS ENTRIES. ╔T RETURNS A
"FILE" DESCRIPTOR NUMBER TO YOU TO USE FOR READING SUCCESSIVE DIRECTORY
ENTIRES WITH THE "DIRREAD" CALL. ╘HE PATHNAME THAT YOU GIVE TO THIS
CALL MUST BE A PROPER DIRECTORY NAME LIKE "A:" OR "C:2//C64/GAMES/:",
ENDING WITH A COLON CHARACTER. ┘OU CAN HAVE DIRECTORIES FROM MULTIPLE
DEVICES OPEN FOR READING AT ONE TIME, BUT YOU CANNOT HAVE THE DIRECTORY
OF ONE DEVICE OPEN MULTIPLE TIMES. ┴LSO NOTE THAT YOU CANNOT PASS
WILDCARDS TO THIS CALL; YOU WILL RECEIVE THE ENTIRE DIRECTORY LISTING.
╬┴═┼ : DIRCLOSE
╨╒╥╨╧╙┼: CLOSE A DIRECTORY OPENED FOR SCANNING
┴╥╟╙ : .┴ = FILE DESCRIPTOR NUMBER
╥┼╘╒╥╬╙: .├╙ = ERROR OCCURRED FLAG
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
├LOSES A DIRECTORY THAT IS OPEN FOR READING. ┘OU CAN MAKE THIS CALL AT
ANY POINT WHILE SCANNING A DIRECTORY; YOU DO NOT HAVE TO FINISH SCANNING
AN ENTIRE DIRECTORY FIRST.
╬┴═┼ : DIRREAD
╨╒╥╨╧╙┼: READ THE NEXT DIRECTORY ENTRY FROM AN OPEN DIRECTORY
┴╥╟╙ : .╪ = FILE DESCRIPTOR NUMBER
╥┼╘╒╥╬╙: .┌ = END OF DIRECTORY FLAG
.├╙ = ERROR OCCURRED FLAG
ACE─IRENT┬UFFER = NEW DIRECTORY ENTRY DATA
┴╠╘┼╥╙ : .┴, .╪, .┘, ERRNO
╥EADS THE NEXT DIRECTORY ENTRY FROM THE SPECIFIED OPEN DIRECTORY INTO
THE SYSTEM INTERFACE GLOBAL VARIABLE "ACE─IRENT┬UFFER" DESCRIBED
EARLIER. ┴FTER OPENING A DIRECTORY FOR READING, THE FIRST TIME YOU CALL
THIS ROUTINE, YOU WILL RECEIVE THE NAME OF THE DISK (OR DIRECTORY). ╘HE
"ACE─IRENT╬AME╠EN" AND "ACE─IRENT╬AME" FIELDS ARE THE ONLY ONES THAT